이 문서 내용은 좀 낡았습니다.
60일이나 편집 안된 오래된 망한 문서니 개발 문서인 경우 참고할 때 조심하세요. 최신 정보를 알고 싶으면 게시판에 글 써주세요


목차
1. 개요
2. 뭐가 문제였나?
3. 문제의 해결

1. 개요 ✎

코드를 짜다보니 이론적으로만 들었던 문제 상황을 실제로 만나게 되서 동일 사례 방지 겸사 문서를 작성하게 되었다

2. 뭐가 문제였나? ✎


def do_inter_render(self, data, doc_include):
    doc_set = self.doc_set
    doc_set['doc_include'] = doc_include

    data_end = class_do_render_namumark(self.curs, self.doc_name, data, doc_set, self.lang_data, do_type = 'inter')()


여기서 doc_set = self.doc_set 부분이 버그의 원인이 되었다

의도는 함수로 전달하기 전에 dict 요소 안의 doc_include를 파라미터의 doc_include로 변경하려고 했으나

doc_set이 self.doc_set의 얕은 복사되버리는 바람에 self.doc_set의 요소도 같이 변경되고 말았다(...)

이렇게 되어버리는 바람에 렌더링 전체 doc_set이 동일하게 되어버려서 발생한 문제였다

3. 문제의 해결 ✎

doc_set = dict(self.doc_set)


그냥 깊은 복사하면 된다

사실 이론적으로도 이미 알고 굉장히 간단한 문제인데 이상하게 짜다보면 생각이 잘 안난다...

방어적 프로그래밍이 부족했던 것 같다

분류 : (+)

관련 문서





(돌아가기)
(임시 저장) (임시 저장 불러오기)


(틀) (링크) (중괄호) (표) (추가)



비로그인 상태입니다. 편집 시 지금 접속한 IP가 기록됩니다.